import axios from 'axios';
import { message } from 'antd';
import Cookies from 'js-cookie';

/**
 * http请求工具类
 */
const HttpRequestUtils = {
    // 创建服务器axios实例
    serverService: axios.create({
        baseURL: 'http://61.171.118.42:8765/',
        timeout: 30000, // 请求超时时间
        headers: {
            'Content-Type': 'application/json',
        },
    }),

    // 创建本地axios实例
    localAxiosService: axios.create({
        baseURL: 'http://127.0.0.1:8765/',
        timeout: 30000, // 请求超时时间
        headers: {
            'Content-Type': 'application/json',
        },
    }),

    // 初始化方法：添加拦截器
    init() {
        // 添加请求拦截器
        [this.serverService, this.localAxiosService].forEach(service => {
            service.interceptors.request.use(
                config => {
                    console.log(`🚀 请求拦截: ${config.method.toUpperCase()} ${config.baseURL}${config.url}`);
                    console.log('请求参数:', config.data || config.params);

                    // 统一添加认证信息（如果有）
                    const token = Cookies.get('token');
                    if (token) {
                        config.headers.Authorization = `Bearer ${token}`;
                    }

                    return config;
                },
                error => {
                    console.error('❌ 请求错误:', error);
                    // 统一处理请求错误，避免页面崩溃
                    message.error('请求配置错误，请重试');
                    return Promise.reject({message: '请求配置错误', originalError: error});
                }
            );

            // 添加响应拦截器
            service.interceptors.response.use(
                response => {
                    console.log(`✅ 响应拦截: ${response.config.url}`, response.data);

                    // 根据后端返回格式处理（假设统一返回格式 {code, message, data}）
                    if (response.data && response.data.code !== 200) {
                        message.error(response.data.message || '请求失败');
                        return Promise.reject({
                            message: response.data.message || '请求失败',
                            code: response.data.code,
                            data: response.data
                        });
                    }

                    return response.data; // 直接返回data字段，简化调用
                },
                error => {
                    console.group('❌ 响应错误详情');
                    console.error('错误对象:', error);

                    let errorMsg = '网络请求失败，请检查网络连接';
                    let errorCode = -1;

                    if (error.response) {
                        // 服务器返回错误状态码
                        console.error('响应数据:', error.response.data);
                        console.error('响应状态:', error.response.status);
                        console.error('响应头:', error.response.headers);

                        errorCode = error.response.status;
                        errorMsg = `请求失败 ${error.response.status}`;
                        if (error.response.data && error.response.data.message) {
                            errorMsg += `: ${error.response.data.message}`;
                        }
                    } else if (error.request) {
                        // 请求已发送，但没有收到响应（服务器无响应）
                        console.error('请求已发送，但无响应');
                        errorMsg = '服务器无响应，请检查服务器状态';
                    } else {
                        // 请求配置错误
                        console.error('请求配置错误:', error.message);
                        errorMsg = `请求配置错误: ${error.message}`;
                    }

                    console.groupEnd();
                    // 返回一个包含错误信息的对象，而不是抛出原始错误
                    return Promise.reject({
                        message: errorMsg,
                        code: errorCode,
                        originalError: error
                    });
                }
            );
        });
    },

    /**
     * 发送POST请求
     * @param {string} url - 请求URL
     * @param {object} data - 请求数据
     * @param {object} config - 额外配置
     * @returns {Promise}
     */
    post(url, data = {}, config = {}) {
        const axiosInstance = Cookies.get('BACK_ROUTE') === "LOCALHOST" ? this.localAxiosService : this.serverService;
        return axiosInstance.post(url, data, config)
            .catch(err => {
                return err.message; // 返回null或默认值，让调用者可以安全处理
            });
    },

    /**
     * 发送GET请求
     * @param {string} url - 请求URL
     * @param {object} params - 请求参数
     * @param {object} config - 额外配置
     * @returns {Promise}
     */
    get(url, params = {}, config = {}) {
        const axiosInstance = Cookies.get('BACK_ROUTE') === "LOCALHOST" ? this.localAxiosService : this.serverService;
        return axiosInstance.get(url, {params, ...config})
            .catch(err => {
                return err.message; // 返回null或默认值，让调用者可以安全处理
            });
    },
};

// 初始化拦截器
HttpRequestUtils.init();

export default HttpRequestUtils;